#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define High 20
#define Width 30
int moveDirection;
int canvas[High][Width]={0};
void gotoxy(int x,int y)
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);
 } 
 void moveSnakeByDirection()
 {
 	int i,j;
 	for(i=1;i<High-1;i++)
 	{
 		for(j=1;j<Width-1;j++)
 		{
 			if(canvas[i][j]>0)
 			    canvas[i][j]++;
		 }
	 }
	 int oldtail_i,oldtail_j,oldhead_i,oldhead_j;
	 int max=0;
	 for(i=1;i<High-1;i++)
	 {
	 	for(j=1;j<Width-1;j++)
	 	{
	 		if(canvas[i][j]>0)
	 		{
	 			if(max<canvas[i][j])
	 			{
	 				max=canvas[i][j];
	 				oldtail_i=i;
	 				oldtail_j=j;
				 }
				 if(canvas[i][j]==2)
				 {
				 	oldhead_i=i;
				 	oldhead_j=j;
				 }
			 }
		 }
	 }
	 canvas[oldtail_i][oldtail_j]=0;
	 if(moveDirection==1)
	     canvas[oldhead_i-1][oldhead_j]=1;
	 if(moveDirection==2)
	     canvas[oldhead_i+1][oldhead_j]=1;
	 if(moveDirection==3)
	     canvas[oldhead_i][oldhead_j-1]=1;
	 if(moveDirection==4)
	     canvas[oldhead_i][oldhead_j+1]=1;
 }
 void startup()
 {
 	int i,j;
 	for(i=0;i<High;i++)
 	{
 		canvas[i][0]=-1;
 		canvas[i][Width-1]=-1;
	 }
	 for(j=0;j<Width;j++)
	 {
	 	canvas[0][j]=-1;
	 	canvas[High-1][j]=-1;
	 }
	 canvas[High/2][Width/2]=1;
	 for(i=1;i<=4;i++)
	 {
	 	canvas[High/2][Width/2-i]=i+1;
	 }
	 moveDirection=4;
 }
 void show()
 {
 	gotoxy(0,0);
 	int i,j;
 	for(i=0;i<High;i++)
 	{
 		for(j=0;j<Width;j++)
 		{
 			if(canvas[i][j]==0)
 			    printf(" ");
 			if(canvas[i][j]==-1)
 			    printf("#");
 			if(canvas[i][j]==1)
 			    printf("@");
 			if(canvas[i][j]>1)
 			    printf("*");
		 }
		 printf("\n"); 
	 }
	 Sleep(100);
 }
 void updateWithoutInput()
 {
 	moveSnakeByDirection();
 }
 void updateWithInput()
 {
 }
 int main()
 {
 	startup();
 	while(1)
 	{
 		show();
 		updateWithoutInput();
 		updateWithInput;
	 }
	 return 0;
 }
